灰色模型java代码

您所在的位置:网站首页 java 简单代码 灰色模型java代码

灰色模型java代码

2023-03-14 23:28| 来源: 网络整理| 查看: 265

灰⾊模型

java

代码

_

灰⾊模型的简单

Java

实现

前⼏天在以前的遗留代码中发现⼀个问题,就是我⽣成的⼀个数据的⾛势曲线的预测值(⽤于灰⾊时间序列预测)总是和⽼代码⾥的不⼀致,

具体来说就是:遗留代码⾥⾯的预测值的斜率总是为零,相⽐之下我⽣成的就⽐较合理了,和原有数据的⾛势相⽐基本⼀致。后来发现这个

不知道谁写的代码⾥⾯⼜全是坑,连灰⾊模型都是错的,输⼊的数据也是错的。。。

所以,趁着这个周末有空,抽出⼀点陪⼥朋友的时间(不会花太长时间的,还是⼥朋友重要!),来写⼀些关于灰⾊模型的Java的简单实现。

⼀、对灰⾊模型的建模分析

⾸先,关于灰⾊模型(后⾯简称为GM),简单讲就是介于⿊⾊模型和⽩⾊模型之间,利⽤已知的数据来推测未知数据的⼀种模型(更具体的描

述可以看灰⾊模型的简单介绍)。

好的,从上⾯我们可以知道,运⽤GM,有这么⼏个步骤:处理数据,使其可以运⽤于GM中

设原始数据列为$$X^{(0)}=x^{(0)}(1)+x^{(0)}(2)+x^{(0)}(3)+…+x^{(0)}(n)$$那么其级数⽐则是:$$λ(k)=frac{x^{(0)}(k-1)}

{x^{(0)}(k)},k=2,3,4…n$$

当所有级数⽐都在区间:$$(e^{frac{-2}{n+1}},e^{frac{2}{n+1}})(注:这个区间和正态分布的概率密度有关)$$

此时的数据列就可以建⽴GM,否则,对原始数据列进⾏变换(⽐如平移),使其满⾜上⾯的条件。

建⽴GM模型

假设数据列:$$X^{(0)}=x^{(0)}(1)+x^{(0)}(2)+.。。+x^{(0)}(n)$$满⾜条件,我们再通过累加⽣成数据列(也可以使⽤其他⽅式,⽐如累

减、均值等):$$X^{(1}=x^{(1)}(1)+x^{(1)}(2)+.。。+x^{(1)}(n)$$

其中:$$x^{(1)}(k)=sum_{i=0}^{k}x(i)$$

定义(x^{(1)})的灰导数为:

$$dx^{(1)}(k)=x^{(0)}(k)=x^{(1)}(k)+x^{(1)}(k-1)$$

令:$$z^{(1)}(k)=frac{1}{2}(x^{(1)}(k)+x^{(1)}(k-1)),(k=2,3,…,n)$$

定义GM(1,1)的灰微分⽅程模型为:

$$x^{(0)}(k)+az^{(1)}(k)=b$$

(其中x^{(0)}(k)称为灰导数,a称为发展系数,z^{(1)}(k)称为⽩化背景值,b称为灰作⽤量)。

(将x^{(0)}(k)+az^{(1)}(k)=b) 展开成如下形式:

$$left[matrix{x^{(0)}(2)\x^{(0)}(3)\x^{(0)}(4)\ …\x^{(0)}(n)}right]=left[matrix{-frac{1}{2}(x^{(1)}(1)+x^{(1)}(2))&1\ -frac{1}

{2}(x^{(1)}(2)+x^{(1)}(3))&1\ -frac{1}{2}(x^{(1)}(3)+x^{(1)}(4))&1\ …& …\ -frac{1}{2}(x^{(1)}(n-1)+x^{(1)}(n))&1}right]$$

(令Y=left[matrix{x^{(0)}(2)\x^{(0)}(3)\x^{(0)}(4)\ …\x^{(0)}(n)}right],B=left[matrix{-frac{1}{2}(x^{(1)}(1)+x^{(1)}(2))&1\ -

frac{1}{2}(x^{(1)}(2)+x^{(1)}(3))&1\ -frac{1}{2}(x^{(1)}(3)+x^{(1)}(4))&1\ …& …\ -frac{1}{2}(x^{(1)}(n-1)+x^{(1)}

(n))&1}right],phi=left[matrix{a &b}right]^{mit T},则上式可以写成Y=Bphi)

由最⼩平⽅法可以求出:$$hat{phi}=left[matrix{hat{a} & hat{b}}right]^{mit T}=(B^{mit T}B)^{-1}B^{T}Y$$

将其代⼊,求出离散解为:$$hat{x^{(1)}}(k+1)=(x^{(0)}(1)-frac{hat{b}}{hat{a}})e^{-hat{a}K}+frac{hat{b}}{hat{a}} (1)$$

对于原始数据,有:$$hat{x}^{(0)}(k+1)=hat{x}^{(1)}(k+1)-hat{x}^{(1)}(k)=(1-e^{hat{a}})(x^{(0)}(1)-frac{hat{b}}{hat{a}})e^{-

hat{a}k} (2)$$

(1)、(2)式称为GM(1,1)模型的时间响应函数模型,是我们计算预测值的基本公式。

对于灰微分⽅程,若将(x^{(0)}(k))的时间k视为连续变量t,则数列(x^{(1)})可视为时间的函数,记为(x^{(1)}=x^{(1)}(t)),并让灰导数对应

于导数(frac{dx^{(1)}}{dt}),背景值(z^{(1)}(k))对应于(x^{(1)}(k)),则得到的GM(1,1)对应的⽩微分⽅程:$$frac{dx^{(1)}}

{dt}+ax^{(1)}=b$$称之为GM(1,1)的⽩化型。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3